#include "bmp.h"

#include "lcd.h"
int lcdFd;
int(*lcd_p);;
int bmp_show(char* fileName)
{
		//2、打开图片文件
	int bmpFd = open(fileName,O_RDWR);
	printf("%s\n",fileName);
	if(bmpFd == -1)
	{
		perror("open bmp error");
		return -1;
	}
	//偏移文件54个字节 
	lseek(bmpFd,108,SEEK_SET);
	
	//3、读取图片里面的像素数据Buf
	char buf[800*480*3];
	read(bmpFd,buf,800*480*3);
	
	//进行颜色BGR-->ARGB
	int i,j;
	int tempbuf[800*480];
	for(i=0,j=0; i<800*480; i++,j+=3)
	{
		tempbuf[i] = 0x00<<24|buf[2+j]<<16|buf[1+j]<<8|buf[j];
	}
	//将图片进行上下颠倒
	int lcdbuf[800*480];
	for(j=0; j<480; j++)
	{
		for(i=0; i<800; i++)
		{
			lcdbuf[j*800+i] = tempbuf[(479-j)*800 + i];
		}
	}
	
	//4、将读取出来的图像数据 写入（填充）到液晶屏文件中---显示
	//write(lcdFd,lcdbuf,800*480*4);  使用内存映射替代
	for(i=0; i<800*480; i++)
	{
		lcd_p[i] = lcdbuf[i];
	}
	
	//6、关闭图片文件
	close(bmpFd);
}


int bmp_scale(char*fileName,int posX,int posY,int scale)
{
		//2、打开图片文件
	int bmpFd = open(fileName,O_RDWR);
	if(bmpFd == -1)
	{
		perror("open bmp error");
		return -1;
	}
	//偏移文件54个字节 
	lseek(bmpFd,54,SEEK_SET);
	
	//3、读取图片里面的像素数据Buf
	char buf[800*480*3];
	read(bmpFd,buf,800*480*3);
	
	//进行颜色BGR-->ARGB
	int i,j;
	int tempbuf[800*480];
	for(i=0,j=0; i<800*480; i++,j+=3)
	{
		tempbuf[i] = 0x00<<24|buf[2+j]<<16|buf[1+j]<<8|buf[j];
	}
	//将图片进行上下颠倒
	int lcdbuf[800*480];
	for(j=0; j<480; j++)
	{
		for(i=0; i<800; i++)
		{
			lcdbuf[j*800+i] = tempbuf[(479-j)*800 + i];
		}
	}
	//将图片进行指定倍数的切割
	int minbuf[800/scale * 480/scale];
	for(j=0; j<480/scale; j++)
	{
		for(i=0; i<800/scale; i++)
		{
			minbuf[j*800/scale + i] = lcdbuf[j*scale*800 + i*scale];
		}
	}
	
	//4、将读取出来的图像数据 写入（填充）到液晶屏文件中---显示
	for(j=0; j<480/scale; j++)
	{
		for(i=0; i<800/scale; i++)
		{
			lcd_p[j*800+i + posY*800 + posX] = minbuf[j*800/scale + i];
		}
	}
	
	//6、关闭图片文件
	close(bmpFd);
}

